<?php

namespace Seguridad\Controller\Service;

use Zend\Db\Adapter\Adapter;
use Componentes\Controller\UtilsArrayController;
use Seguridad\Model\Entity\Usuario;
use Seguridad\Controller\Service\GenericService;
use Seguridad\Controller\Service\GrupoService;
use Seguridad\Model\Dao\UsuarioDAO;

//SERVICIO
class UsuarioService extends GenericService {

    /**
     * @var Zend\Db\Adapter\Adapter 
     */
    private $dbAdapter;
    private static $usuarioService;

    /**
     * @param \Zend\Db\Adapter\Adapter $dbAdapter
     */
    private function __construct(Adapter $dbAdapter) {
        $this->dbAdapter = $dbAdapter;
    }

    public static function getInstance($adapter) {
        if (self::$usuarioService == null) {
            self::$usuarioService = new UsuarioService($adapter);
        }
        return self::$usuarioService;
    }

    public function getUsuarioDao() {
        return UsuarioDAO::getInstance($this->dbAdapter);
    }

    /**
     * @param type $id
     * @return type
     */
    public function getRegistro($id) {
        $data = null;
        $success = false;
        $usuario = $this->obtenerUsuarioSegunId($id);
        if ($usuario->getId() != null) {
            $data[0] = $usuario->objectToArray();
            $success = true;
        }
        return UtilsArrayController::organizarOutput($success, $data, null);
    }

//INCOMPLETO
    public function getRegistroCompleto($id) {
        $usuario = $this->obtenerUsuarioSegunId($id);
        $data[0] = $usuario->objectToArray();
        $data[0]['_grupo'] = $this->optenerArrayGrupo($usuario);
        return UtilsArrayController::organizarOutput(true, $data, null);
    }

    /**
     * @param type $login
     * @return type
     */
    public function getUsuarioSegunLogin($login) {
        $result = $this->getUsuarioDao()->getUsuarioSegunLogin($login);
        return $result;
    }

    /**
     * @param type $login
     * @return type
     */
//INCOMPLETO
    public function validarUsuario($login, $password) {
        $success = false;
        $mensaje = 'ERROR AL INICIAR SESION';
        $data = null;
        $idUsuario = null;
        $usuario = $this->obtenerUsuarioSegunLogin($login);
        if ($usuario != null) {
            if ($usuario->getPassword() == $password) {
                if ($usuario->getBloqueo() == $this->activo) {
                    $success = true;
                    $mensaje = 'INICIO DE SESION EXITOSA';
                    //$data = $this->obtenerGruposSegunUsuario($usuario);
                    $idUsuario = $usuario->getId();
                } else {
                    $mensaje = 'USUARIO INACTIVO';
                }
            }
        }
        $output = array(
            'success' => $success,
            'data' => $data,
            'total' => count($data),
            'mensaje' => $mensaje,
            'idUsuario' => $idUsuario
        );
        return $output;
    }

//IMCOMPLETO
    public function obtenerGruposSegunUsuario($usuario) {
        $servicioGrupo = GrupoService::getInstance($this->dbAdapter);
        $registros = $this->getUsuarioDao()->getGruposSegunUsuario($usuario->getId());
        $data = UtilsArrayController::llenarData($registros);
        $arrayGrupos = array();
        $longitud = count($data);
        for ($i = 0; $i < $longitud; $i++) {
            $idGrupo = $data[$i]['id_grupo'];
            $grupo = $servicioGrupo->obtenerGrupoSegunId($idGrupo);
            $arrayGrupo = $grupo->objectToArray();
            $arrayGrupos[$i] = $arrayGrupo;
        }
        return $arrayGrupos;
    }

//------Retornan los objetos-------

//NO SE ESTA UTILIZANDO AUN
    public function obtenerUsuarioSegunLogin($login) {
        $registros = $this->getUsuarioDao()->getUsuarioSegunLogin($login);
        $data = UtilsArrayController::llenarData($registros);
        $usuario = new Usuario($data[0]);
        return $usuario;
    }

    public function obtenerUsuarioSegunId($id) {
        $registros = $this->getUsuarioDao()->getRegistro($id);
        $data = UtilsArrayController::llenarData($registros);
        $usuario = new Usuario($data[0]);
        return $usuario;
    }

}
